package br.com.foxinline.modelo.ep;

import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.modelo.Cidade;
import br.com.foxinline.modelo.Estado;
import br.com.foxinline.modelo.Pessoa;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author cadomeireles
 */
@Entity
public class Testamento implements Serializable {

    @Id
    @SequenceGenerator(sequenceName = "seq_testamento", name = "seq_testamento", allocationSize = 1)
    @GeneratedValue(generator = "seq_testamento", strategy = GenerationType.SEQUENCE)
    private Long id;
    
    private boolean ativo = true;
    
    @Temporal(TemporalType.DATE)
    private Date dataCadastro = new Date();
    
    @Column(length = 20)
    private String numero;
    
    @ManyToOne
    private AtoTipoEP atoTipoEP;
    
    @Temporal(TemporalType.DATE)
    private Date dataTestamento;
    
    @Column(length = 20)
    private String livro;
    
    @Column(length = 20)
    private String livroComplemento;
    
    @Column(length = 20)
    private String folha;
    
    @Column(length = 20)
    private String folhaComplemento;
    
    @Column(columnDefinition="text")
    private String observacao;
    
    @ManyToOne
    private Estado estadoRevogacao;
    
    @ManyToOne
    private Cidade cidadeRevogacao;
    
    private String cartorioRevogacao;
    
    @Column(length = 20)
    private String livroRevogacao;
    
    @Column(length = 20)
    private String livroComplementoRevogacao;
    
    @Column(length = 20)
    private String folhaRevogacao;
    
    @Column(length = 20)
    private String folhaComplementoRevogacao;
    
    @Temporal(TemporalType.DATE)
    private Date dataRevogacaoTestamento;
    
    private boolean atoDesconhecido;
    
    @Column(columnDefinition="text")
    private String desconhecido;
    
    @ManyToOne(cascade = CascadeType.ALL)
    private Pessoa testador;
    
    @OneToMany(cascade = CascadeType.ALL)
    private List<SeloEP> selosEP;
    
    @OneToMany(cascade = CascadeType.ALL)
    private List<Anexo> anexos;

    public Testamento() {
    }

    public Testamento(Long id, String numero, AtoTipoEP atoTipoEP, Date dataTestamento, String livro, String livroComplemento, String folha, String folhaComplemento, String observacao, Estado estadoRevogacao, Cidade cidadeRevogacao, String cartorioRevogacao, String livroRevogacao, String livroComplementoRevogacao, String folhaRevogacao, String folhaComplementoRevogacao, Date dataRevogacaoTestamento, boolean atoDesconhecido, String desconhecido, Pessoa testador, List<SeloEP> selosEP, List<Anexo> anexos) {
        this.id = id;
        this.numero = numero;
        this.atoTipoEP = atoTipoEP;
        this.dataTestamento = dataTestamento;
        this.livro = livro;
        this.livroComplemento = livroComplemento;
        this.folha = folha;
        this.folhaComplemento = folhaComplemento;
        this.observacao = observacao;
        this.estadoRevogacao = estadoRevogacao;
        this.cidadeRevogacao = cidadeRevogacao;
        this.cartorioRevogacao = cartorioRevogacao;
        this.livroRevogacao = livroRevogacao;
        this.livroComplementoRevogacao = livroComplementoRevogacao;
        this.folhaRevogacao = folhaRevogacao;
        this.folhaComplementoRevogacao = folhaComplementoRevogacao;
        this.dataRevogacaoTestamento = dataRevogacaoTestamento;
        this.atoDesconhecido = atoDesconhecido;
        this.desconhecido = desconhecido;
        this.testador = testador;
        this.selosEP = selosEP;
        this.anexos = anexos;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public AtoTipoEP getAtoTipoEP() {
        return atoTipoEP;
    }

    public void setAtoTipoEP(AtoTipoEP atoTipoEP) {
        this.atoTipoEP = atoTipoEP;
    }

    public Date getDataTestamento() {
        return dataTestamento;
    }

    public void setDataTestamento(Date dataTestamento) {
        this.dataTestamento = dataTestamento;
    }

    public String getLivro() {
        return livro;
    }

    public void setLivro(String livro) {
        this.livro = livro;
    }

    public String getLivroComplemento() {
        return livroComplemento;
    }

    public void setLivroComplemento(String livroComplemento) {
        this.livroComplemento = livroComplemento;
    }

    public String getFolha() {
        return folha;
    }

    public void setFolha(String folha) {
        this.folha = folha;
    }

    public String getFolhaComplemento() {
        return folhaComplemento;
    }

    public void setFolhaComplemento(String folhaComplemento) {
        this.folhaComplemento = folhaComplemento;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public Estado getEstadoRevogacao() {
        return estadoRevogacao;
    }

    public void setEstadoRevogacao(Estado estadoRevogacao) {
        this.estadoRevogacao = estadoRevogacao;
    }

    public Cidade getCidadeRevogacao() {
        return cidadeRevogacao;
    }

    public void setCidadeRevogacao(Cidade cidadeRevogacao) {
        this.cidadeRevogacao = cidadeRevogacao;
    }

    public String getCartorioRevogacao() {
        return cartorioRevogacao;
    }

    public void setCartorioRevogacao(String cartorioRevogacao) {
        this.cartorioRevogacao = cartorioRevogacao;
    }

    public String getLivroRevogacao() {
        return livroRevogacao;
    }

    public void setLivroRevogacao(String livroRevogacao) {
        this.livroRevogacao = livroRevogacao;
    }

    public String getLivroComplementoRevogacao() {
        return livroComplementoRevogacao;
    }

    public void setLivroComplementoRevogacao(String livroComplementoRevogacao) {
        this.livroComplementoRevogacao = livroComplementoRevogacao;
    }

    public String getFolhaRevogacao() {
        return folhaRevogacao;
    }

    public void setFolhaRevogacao(String folhaRevogacao) {
        this.folhaRevogacao = folhaRevogacao;
    }

    public String getFolhaComplementoRevogacao() {
        return folhaComplementoRevogacao;
    }

    public void setFolhaComplementoRevogacao(String folhaComplementoRevogacao) {
        this.folhaComplementoRevogacao = folhaComplementoRevogacao;
    }

    public Date getDataRevogacaoTestamento() {
        return dataRevogacaoTestamento;
    }

    public void setDataRevogacaoTestamento(Date dataRevogacaoTestamento) {
        this.dataRevogacaoTestamento = dataRevogacaoTestamento;
    }

    public boolean isAtoDesconhecido() {
        return atoDesconhecido;
    }

    public void setAtoDesconhecido(boolean atoDesconhecido) {
        this.atoDesconhecido = atoDesconhecido;
    }

    public String getDesconhecido() {
        return desconhecido;
    }

    public void setDesconhecido(String desconhecido) {
        this.desconhecido = desconhecido;
    }

    public Pessoa getTestador() {
        return testador;
    }

    public void setTestador(Pessoa testador) {
        this.testador = testador;
    }

    public List<SeloEP> getSelosEP() {
        return selosEP;
    }

    public void setSelosEP(List<SeloEP> selosEP) {
        this.selosEP = selosEP;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 11 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 11 * hash + (this.ativo ? 1 : 0);
        hash = 11 * hash + (this.dataCadastro != null ? this.dataCadastro.hashCode() : 0);
        hash = 11 * hash + (this.numero != null ? this.numero.hashCode() : 0);
        hash = 11 * hash + (this.atoTipoEP != null ? this.atoTipoEP.hashCode() : 0);
        hash = 11 * hash + (this.dataTestamento != null ? this.dataTestamento.hashCode() : 0);
        hash = 11 * hash + (this.livro != null ? this.livro.hashCode() : 0);
        hash = 11 * hash + (this.livroComplemento != null ? this.livroComplemento.hashCode() : 0);
        hash = 11 * hash + (this.folha != null ? this.folha.hashCode() : 0);
        hash = 11 * hash + (this.folhaComplemento != null ? this.folhaComplemento.hashCode() : 0);
        hash = 11 * hash + (this.observacao != null ? this.observacao.hashCode() : 0);
        hash = 11 * hash + (this.estadoRevogacao != null ? this.estadoRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.cidadeRevogacao != null ? this.cidadeRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.cartorioRevogacao != null ? this.cartorioRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.livroRevogacao != null ? this.livroRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.livroComplementoRevogacao != null ? this.livroComplementoRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.folhaRevogacao != null ? this.folhaRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.folhaComplementoRevogacao != null ? this.folhaComplementoRevogacao.hashCode() : 0);
        hash = 11 * hash + (this.dataRevogacaoTestamento != null ? this.dataRevogacaoTestamento.hashCode() : 0);
        hash = 11 * hash + (this.atoDesconhecido ? 1 : 0);
        hash = 11 * hash + (this.desconhecido != null ? this.desconhecido.hashCode() : 0);
        hash = 11 * hash + (this.testador != null ? this.testador.hashCode() : 0);
        hash = 11 * hash + (this.selosEP != null ? this.selosEP.hashCode() : 0);
        hash = 11 * hash + (this.anexos != null ? this.anexos.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Testamento other = (Testamento) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.ativo != other.ativo) {
            return false;
        }
        if (this.dataCadastro != other.dataCadastro && (this.dataCadastro == null || !this.dataCadastro.equals(other.dataCadastro))) {
            return false;
        }
        if ((this.numero == null) ? (other.numero != null) : !this.numero.equals(other.numero)) {
            return false;
        }
        if (this.atoTipoEP != other.atoTipoEP && (this.atoTipoEP == null || !this.atoTipoEP.equals(other.atoTipoEP))) {
            return false;
        }
        if (this.dataTestamento != other.dataTestamento && (this.dataTestamento == null || !this.dataTestamento.equals(other.dataTestamento))) {
            return false;
        }
        if ((this.livro == null) ? (other.livro != null) : !this.livro.equals(other.livro)) {
            return false;
        }
        if ((this.livroComplemento == null) ? (other.livroComplemento != null) : !this.livroComplemento.equals(other.livroComplemento)) {
            return false;
        }
        if ((this.folha == null) ? (other.folha != null) : !this.folha.equals(other.folha)) {
            return false;
        }
        if ((this.folhaComplemento == null) ? (other.folhaComplemento != null) : !this.folhaComplemento.equals(other.folhaComplemento)) {
            return false;
        }
        if ((this.observacao == null) ? (other.observacao != null) : !this.observacao.equals(other.observacao)) {
            return false;
        }
        if (this.estadoRevogacao != other.estadoRevogacao && (this.estadoRevogacao == null || !this.estadoRevogacao.equals(other.estadoRevogacao))) {
            return false;
        }
        if (this.cidadeRevogacao != other.cidadeRevogacao && (this.cidadeRevogacao == null || !this.cidadeRevogacao.equals(other.cidadeRevogacao))) {
            return false;
        }
        if ((this.cartorioRevogacao == null) ? (other.cartorioRevogacao != null) : !this.cartorioRevogacao.equals(other.cartorioRevogacao)) {
            return false;
        }
        if ((this.livroRevogacao == null) ? (other.livroRevogacao != null) : !this.livroRevogacao.equals(other.livroRevogacao)) {
            return false;
        }
        if ((this.livroComplementoRevogacao == null) ? (other.livroComplementoRevogacao != null) : !this.livroComplementoRevogacao.equals(other.livroComplementoRevogacao)) {
            return false;
        }
        if ((this.folhaRevogacao == null) ? (other.folhaRevogacao != null) : !this.folhaRevogacao.equals(other.folhaRevogacao)) {
            return false;
        }
        if ((this.folhaComplementoRevogacao == null) ? (other.folhaComplementoRevogacao != null) : !this.folhaComplementoRevogacao.equals(other.folhaComplementoRevogacao)) {
            return false;
        }
        if (this.dataRevogacaoTestamento != other.dataRevogacaoTestamento && (this.dataRevogacaoTestamento == null || !this.dataRevogacaoTestamento.equals(other.dataRevogacaoTestamento))) {
            return false;
        }
        if (this.atoDesconhecido != other.atoDesconhecido) {
            return false;
        }
        if ((this.desconhecido == null) ? (other.desconhecido != null) : !this.desconhecido.equals(other.desconhecido)) {
            return false;
        }
        if (this.testador != other.testador && (this.testador == null || !this.testador.equals(other.testador))) {
            return false;
        }
        if (this.selosEP != other.selosEP && (this.selosEP == null || !this.selosEP.equals(other.selosEP))) {
            return false;
        }
        if (this.anexos != other.anexos && (this.anexos == null || !this.anexos.equals(other.anexos))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Testamento{" + "id=" + id + ", ativo=" + ativo + ", dataCadastro=" + dataCadastro + ", numero=" + numero + ", atoTipoEP=" + atoTipoEP + ", dataTestamento=" + dataTestamento + ", livro=" + livro + ", livroComplemento=" + livroComplemento + ", folha=" + folha + ", folhaComplemento=" + folhaComplemento + ", observacao=" + observacao + ", estadoRevogacao=" + estadoRevogacao + ", cidadeRevogacao=" + cidadeRevogacao + ", cartorioRevogacao=" + cartorioRevogacao + ", livroRevogacao=" + livroRevogacao + ", livroComplementoRevogacao=" + livroComplementoRevogacao + ", folhaRevogacao=" + folhaRevogacao + ", folhaComplementoRevogacao=" + folhaComplementoRevogacao + ", dataRevogacaoTestamento=" + dataRevogacaoTestamento + ", atoDesconhecido=" + atoDesconhecido + ", desconhecido=" + desconhecido + ", testador=" + testador + ", selosEP=" + selosEP + ", anexos=" + anexos + '}';
    }

}
